package com.ziyun.erp.common.utils;

import com.alibaba.fastjson.JSONObject;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author guizhao
 * @Title: HttpClientUtil
 * @Description: HttpClient 工具类
 * @date 2018-08-0610:40
 */
public class HttpClientUtil {

    public static String doGet(String url, Map<String, String> param) {

        // 创建Httpclient对象
        CloseableHttpClient httpclient = HttpClients.createDefault();

        String resultString = "";
        CloseableHttpResponse response = null;
        try {
            // 创建uri
            URIBuilder builder = new URIBuilder(url);
            if (param != null) {
                for (String key : param.keySet()) {
                    builder.addParameter(key, param.get(key));
                }
            }
            URI uri = builder.build();

            // 创建http GET请求
            HttpGet httpGet = new HttpGet(uri);

            // 执行请求
            response = httpclient.execute(httpGet);
            // 判断返回状态是否为200
            if (response.getStatusLine().getStatusCode() == 200) {
                resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (response != null) {
                    response.close();
                }
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return resultString;
    }

    public static String doGet(String url) {
        return doGet(url, null);
    }

    public static String doPost(String url, Map<String, String> param) {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        String resultString = "";
        try {
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(url);
            // 创建参数列表
            if (param != null) {
                List<NameValuePair> paramList = new ArrayList<>();
                for (String key : param.keySet()) {
                    paramList.add(new BasicNameValuePair(key, String.valueOf(param.get(key))));
                }
                // 模拟表单
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList, "UTF-8");
                httpPost.setEntity(entity);
            }
            // 执行http请求
            response = httpClient.execute(httpPost);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return resultString;
    }

    public static String doPost(String url) {
        return doPost(url, null);
    }

    public static String doPostJson(String url, String json) {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        String resultString = "";
        try {
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(url);
            // 创建请求内容
            StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
            httpPost.setEntity(entity);
            // 执行http请求
            response = httpClient.execute(httpPost);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return resultString;
    }

    /**
     * 发送携带请求头的post请求（欺骗服务器）
     * @param url 请求的url
     * @param param 请求体参数
     * @param headers 请求头信息
     * @return
     */
    public static String doPostWithHeaders(String url, Map<String, String> param, Map<String, String> headers) {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        String resultString = "";
        try {
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(url);
            // 设置post请求头信息
            if(headers != null) {
                for(Map.Entry entry : headers.entrySet()) {
                    String key = (String) entry.getKey();
                    String value = (String) entry.getValue();
                    httpPost.setHeader(key, value);
                }
            }

            // 创建参数列表
            if (param != null) {
                List<NameValuePair> paramList = new ArrayList<>();
                for (String key : param.keySet()) {
                    paramList.add(new BasicNameValuePair(key, param.get(key)));
                }
                // 模拟表单
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);
                httpPost.setEntity(entity);
            }
            // 执行http请求
            response = httpClient.execute(httpPost);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return resultString;
    }

    public static void main(String[] args) {
        String jsonStr = "{\n" +
                "    \"categoryType\":\"single\",\n" +
                "    \"attributesMap\":{\n" +
                "        \"2099\":{\n" +
                "            \"size\":522,\n" +
                "            \"single_double_face\":571,\n" +
                "            \"material\":329,\n" +
                "            \"colour\":582,\n" +
                "            \"quantity\":501,\n" +
                "\t    \"ka\":4587\n" +
                "        }\n" +
                "    }\n" +
                "}";
//        String result = HttpClientUtil.doPostJson("http://192.168.1.33:9100/goods/findFactoryQuote", jsonStr);
//        System.out.println(result);

//        Map<String, String> params = new HashMap<>();
//        params.put("productId", "4028");
//        params.put("buyCount", "1");
//        String result = HttpClientUtil.doGet("http://120.27.237.180:9100/goods/getMerchantStandardGoods", params);
//        System.out.println(result);

        String str = "[{\"buyCount\":1,\"spuName\":\"【818购物节】宣传单页200G\",\"freightTemplateId\":2,\"goodsInfoDetail\":{\"brief\":\"足量印刷，色彩鲜艳，量大优惠\",\"imageUrls\":[\"public/images/d8/6d/26/eb5e379d7f70821289f2f0cd103079ac21d8cdfc.jpg\",\"public/images/f1/ce/d2/190dc80dd42b144e264f6dadb36436b09cbfdee3.jpg\",\"public/images/51/7a/92/4884804195687df6794cc8a1ff2cc13e7717f7fd.jpg\",\"public/images/71/06/85/05d1744bc9504572150a146e85fc\"],\"customerInfo\":\" \",\"defaultImage\":\"public/images/d8/6d/26/eb5e379d7f70821289f2f0cd103079ac21d8cdfc.jpg\"},\"collectCount\":481,\"weight\":119.70,\"store\":0.00,\"marketable\":\"puton\",\"minBuy\":0.00,\"goodsType\":\"standard\",\"unit\":\"张\",\"totalBuyCount\":764.00000,\"isNoStoreSell\":true,\"basePriceDetail\":{\"marketPrice\":\"1505.08\",\"singlePrice\":\"0.25/张\",\"productId\":3844,\"totalPrice\":\"1254.24\",\"sellPrice\":\"1254.24\"},\"sellerDetail\":{\"qq\":\"string\",\"productId\":3844,\"merchantId\":18880,\"mobile\":\"13554652602\",\"isSelf\":true,\"merchantName\":\"中浩紫云111\"}},{\"buyCount\":1,\"spuName\":\"【818购物节】宣传单页200G\",\"freightTemplateId\":2,\"goodsInfoDetail\":{\"brief\":\"足量印刷，色彩鲜艳，量大优惠\",\"imageUrls\":[\"public/images/d8/6d/26/eb5e379d7f70821289f2f0cd103079ac21d8cdfc.jpg\",\"public/images/f1/ce/d2/190dc80dd42b144e264f6dadb36436b09cbfdee3.jpg\",\"public/images/51/7a/92/4884804195687df6794cc8a1ff2cc13e7717f7fd.jpg\",\"public/images/71/06/85/05d1744bc9504572150a146e85fc\"],\"customerInfo\":\" \",\"defaultImage\":\"public/images/d8/6d/26/eb5e379d7f70821289f2f0cd103079ac21d8cdfc.jpg\"},\"collectCount\":481,\"weight\":119.70,\"store\":0.00,\"marketable\":\"puton\",\"minBuy\":0.00,\"goodsType\":\"standard\",\"unit\":\"张\",\"totalBuyCount\":764.00000,\"isNoStoreSell\":true,\"basePriceDetail\":{\"marketPrice\":\"1704.76\",\"singlePrice\":\"0.28/张\",\"productId\":3894,\"totalPrice\":\"1420.64\",\"sellPrice\":\"1420.64\"},\"sellerDetail\":{\"qq\":\"string\",\"productId\":3894,\"merchantId\":18880,\"mobile\":\"13554652602\",\"isSelf\":true,\"merchantName\":\"中浩紫云111\"}},{\"buyCount\":1,\"spuName\":\"【818购物节】宣传单页200G\",\"freightTemplateId\":2,\"goodsInfoDetail\":{\"brief\":\"足量印刷，色彩鲜艳，量大优惠\",\"imageUrls\":[\"public/images/d8/6d/26/eb5e379d7f70821289f2f0cd103079ac21d8cdfc.jpg\",\"public/images/f1/ce/d2/190dc80dd42b144e264f6dadb36436b09cbfdee3.jpg\",\"public/images/51/7a/92/4884804195687df6794cc8a1ff2cc13e7717f7fd.jpg\",\"public/images/71/06/85/05d1744bc9504572150a146e85fc\"],\"customerInfo\":\" \",\"defaultImage\":\"public/images/d8/6d/26/eb5e379d7f70821289f2f0cd103079ac21d8cdfc.jpg\"},\"collectCount\":481,\"weight\":119.70,\"store\":0.00,\"marketable\":\"puton\",\"minBuy\":0.00,\"goodsType\":\"standard\",\"unit\":\"张\",\"totalBuyCount\":764.00000,\"isNoStoreSell\":true,\"basePriceDetail\":{\"marketPrice\":\"3994.53\",\"singlePrice\":\"0.66/张\",\"productId\":3864,\"totalPrice\":\"3328.78\",\"sellPrice\":\"3328.78\"},\"sellerDetail\":{\"qq\":\"string\",\"productId\":3864,\"merchantId\":18880,\"mobile\":\"13554652602\",\"isSelf\":true,\"merchantName\":\"中浩紫云111\"}}]";





    }

}
